﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using DECOR.BL.BE;
using DECOR.BL.BC;
using System.Collections.Generic;
using CM.BL.BE;

namespace DECOR.WebApp
{
    public partial class BuscaDocPos : System.Web.UI.Page
    {
        private List<PedidoBE> _lstPedidos;


        //private List<GenericBE> getGenericBE(ClienteWS.GenericBE[] p)
        //{
        //    List<GenericBE> g = new List<GenericBE>();
        //    try
        //    {
        //        foreach (ClienteWS.GenericBE i in p)
        //        {
        //            GenericBE n = new GenericBE();
        //            n.Codigo = i.Codigo;
        //            n.Descripcion = i.Descripcion;
        //            g.Add(n);
        //        }
        //    }
        //    catch
        //    {
        //        g = null;
        //    }


        //    return g;
        //}

        private void cargaCombos()
        {
            RfcConfigParametersBE objUsuarioWeb = (RfcConfigParametersBE)Session["UsuarioWeb"];
            
            //LLAMADO AL SERVICIO WEB

            //ClienteWS.ClienteWS canalDist = new DECOR.WebApp.ClienteWS.ClienteWS();
            //List<GenericBE> lst = getGenericBE(canalDist.listaCanalDist());

            List<GenericBE> lstCanalDistribucion = new List<GenericBE>();
            List<GenericBE> lstOficina = new List<GenericBE>();
            List<GenericBE> lstOrgVtas = new List<GenericBE>();
            
            if (Session["lstCanalDistribucion"] == null)
            {
                lstCanalDistribucion = ClienteBC.Instance.listaCanalDist("", "");
                Session.Add("lstCanalDistribucion", lstCanalDistribucion);
            }
            else
            {
                lstCanalDistribucion = (List<GenericBE>)Session["lstCanalDistribucion"];
            }

            if (Session["listaOficina"] == null)
            {
                lstOficina = OficinaBC.Instance.listar();
                Session.Add("listaOficina", lstOficina);
            }
            else
            {
                lstOficina = (List<GenericBE>)Session["listaOficina"];
            }

            if (Session["listaOrgVtas"] == null)
            {
                lstOrgVtas = ClienteBC.Instance.listaOrgVtas("");
                Session.Add("listaOrgVtas", lstOrgVtas);
            }
            else
            {
                lstOrgVtas = (List<GenericBE>)Session["listaOrgVtas"];
            }


            cmbCanal.DataValueField = "Codigo";
            cmbCanal.DataTextField = "Descripcion";
            cmbCanal.DataSource = lstCanalDistribucion;
            cmbCanal.DataBind();
            cmbCanal.SelectedValue = "";

            //lst = getGenericBE(canalDist.listar());

            cmbOficina.DataValueField = "Codigo";
            cmbOficina.DataTextField = "Descripcion";
            cmbOficina.DataSource = lstOficina;
            cmbOficina.DataBind();
            cmbOficina.SelectedValue = "";

            //lst = getGenericBE(canalDist.listaOrgVtas());

            cmbOrgVtas.DataValueField = "Codigo";
            cmbOrgVtas.DataTextField = "Descripcion";
            cmbOrgVtas.DataSource = lstOrgVtas;
            cmbOrgVtas.DataBind();
            cmbOrgVtas.SelectedValue = objUsuarioWeb.OrgVentas;
        }


        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!Page.IsPostBack)
                {
                    if (string.IsNullOrEmpty(txtFechaInicio.Text))
                    {
                        txtFechaInicio.Text = DateTime.Today.ToString("dd/MM/yyyy");
                    }
                    if (string.IsNullOrEmpty(txtFechaFin.Text))
                    {
                        txtFechaFin.Text = DateTime.Today.ToString("dd/MM/yyyy");
                    }
                    this.cargaCombos();
                    this.buscarPedidos();
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        private void buscarPedidos()
        {
            PersonaBE objPersona = (PersonaBE)Session["PersonaWeb"];
            if (objPersona != null)
            {
                DateTime fecIni = Convert.ToDateTime(txtFechaInicio.Text);
                DateTime fecFin = Convert.ToDateTime(txtFechaFin.Text);
                if (string.IsNullOrEmpty(txtCodVendedor.Text)) { txtCodVendedor.Text = objPersona.CodPersona; }
                string auxCod = txtCodVendedor.Text == "*" ? "0" : txtCodVendedor.Text;
                this._lstPedidos = PedidoBC.Instance.listaPedidos(txtNumDoc.Text, auxCod, fecIni, fecFin, cmbOrgVtas.SelectedValue, 
                                                                  cmbCanal.SelectedValue, cmbOficina.SelectedValue,txtRefLegal.Text);
                if (!txtNomCliente.Text.Equals(""))
                {
                    //--- filtro x nombre
                    this._lstPedidos = this._lstPedidos.FindAll(X => X.DestFactura.ToUpper().IndexOf(txtNomCliente.Text.Trim().ToUpper()) >= 0);
                }

                //--- filtro x estados:
                foreach (var indControl in upMain.Controls[0].Controls.OfType<CheckBox>())
                {
                    if (!indControl.Checked)
                    {
                        this._lstPedidos.RemoveAll(X => X.Estado.ToUpper().IndexOf(indControl.Text.ToUpper()) >= 0);
                    }
                }

                //--- borrar ofertas de la lista:
                this._lstPedidos.RemoveAll(X => ParametroBC.Instance.esTipoOferta(X.CodTipoDoc));

                PedidoBE tmp; List<DetalleBE> lstTmp;
                GenericBE objTmp = null;
                List<GenericBE> lstMotivRec = null;
                List<PedidoBE> lstPedidosTmp = new List<PedidoBE>();

                foreach (PedidoBE obj in this._lstPedidos)
                {
                    tmp = PedidoBC.Instance.leer(obj.NumPedido, true);

                    lstTmp = new List<DetalleBE>();
                    foreach (DetalleBE det in tmp.Detalle)
                    {
                        if (!string.IsNullOrEmpty(det.MotivoRechazo))
                        {
                            if (lstMotivRec == null) { lstMotivRec = PedidoBC.Instance.listarMotivosRechazo(); }
                            objTmp = lstMotivRec.Find(X => X.Codigo == det.MotivoRechazo);
                            det.MotivoRechazo = objTmp != null ? (objTmp.Codigo + "-" + objTmp.Descripcion).Trim() : det.MotivoRechazo;
                        }
                        switch (cmbCantConfirmada.SelectedValue)
                        {
                            case "0":
                                if (det.CantConfirmada > 0)
                                {
                                    if (!cmbTipoMat.SelectedValue.Equals(""))
                                    {
                                        if (det.TipoMaterial == cmbTipoMat.SelectedValue)
                                        {
                                            lstTmp.Add(det);
                                        }
                                    }
                                    else
                                    {
                                        lstTmp.Add(det);
                                    }
                                }
                                break;
                            case "1":
                                if (det.CantConfirmada == 0)
                                {
                                    if (!cmbTipoMat.SelectedValue.Equals(""))
                                    {
                                        if (det.TipoMaterial == cmbTipoMat.SelectedValue)
                                        {
                                            lstTmp.Add(det);
                                        }
                                    }
                                    else
                                    {
                                        lstTmp.Add(det);
                                    }
                                }
                                break;
                            default:
                                if (!cmbTipoMat.SelectedValue.Equals(""))
                                {
                                    if (det.TipoMaterial == cmbTipoMat.SelectedValue)
                                    {
                                        lstTmp.Add(det);
                                    }
                                }
                                else
                                {
                                    lstTmp.Add(det);
                                }
                                break;
                        }
                    }
                    obj.Detalle = lstTmp;

                    if (obj.Detalle.Count > 0)
                    {
                        lstPedidosTmp.Add(obj);
                    }
                }
                this._lstPedidos = lstPedidosTmp;
                gvPedidos.DataSource = this._lstPedidos;
                gvPedidos.DataBind();

                if (this._lstPedidos.Count == 0)
                {
                    Session["Mensaje"] = "No se encontró información para los parámetros seleccionados.";
                }
            }
            else
            {
                Response.Redirect("Login.aspx");
            }
        }

        protected void ibtnBuscar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                this.buscarPedidos();
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }

        protected void gvPedidos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = gvPedidos.Rows[index];
                string numPedido = "";
                if (row != null)
                {
                    numPedido = ((Label)row.FindControl("lblNumPedido")).Text;
                    if (e.CommandName == "Editar")
                    {
                        string op = Convert.ToString(Session["Operacion"]);
                        if (string.IsNullOrEmpty(op))
                        {
                            PedidoBE objPedido = PedidoBC.Instance.leer(numPedido);
                            if (objPedido != null)
                            {
                                if (objPedido.Tratado)
                                {
                                    Session["PedidoTratado"] = true;
                                }
                                Session["Operacion"] = "editar";
                                Session["Cliente"] = ClienteBC.Instance.leer(objPedido.CodCliente);
                                Session["Pedido"] = objPedido;
                                Response.Redirect("DocVenta.aspx");
                            }
                        }
                        else
                        {
                            Session["Mensaje"] = "Debe cancelar la operación actual para poder visualizar el pedido.";
                        }
                    }
                    else if (e.CommandName == "Flujo")
                    {
                        if (numPedido.Equals(string.Empty) || numPedido.Equals("0000000000"))
                        {
                            Session["Mensaje"] = "Número de documento inválido.";
                        }
                        else
                        {
                            //string str = "<script type='text/javascript'>var win=window.open('Seguimiento.aspx?np=" + numPedido + "',null,'width=650,height=400,top=50,left=250,status=no,resizable=no,scrollbars=yes','true');</script>";
                            string str = "<script type='text/javascript'>var win=window.open('Seguimiento.aspx?np=" + numPedido + "',null,'width=850,height=500,top=50,left=150,status=no,resizable=no,scrollbars=yes','true');</script>";
                            ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), "SEGUIMIENTO", str, false);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Session["Mensaje"] = ex.Message;
            }
            finally
            {
                ((Site)Master).muestraMensajes();
            }
        }
    }
}
